#
# 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
#
#
# @param nums int一维数组
# @return int
#
class Solution:
    def maxSubArrayLength(self, nums):
        # write code here
        if len(nums) <= 2:
            return len(nums)

        # 以i位置结尾的最大长度
        left = [0 for _ in range(len(nums))]
        # 以i位置开始的最大长度
        right = [0 for _ in range(len(nums))]

        left[0] = 1
        for i in range(len(nums) - 1):
            if nums[i + 1] <= nums[i]:
                left[i + 1] = 1
            else:
                left[i + 1] = left[i] + 1

        right[len(nums) - 1] = 1
        for i in range(len(nums) - 2, -1, -1):
            if nums[i] >= nums[i + 1]:
                right[i] = 1
            else:
                right[i] = right[i + 1] + 1

        ans = 2
        for i in range(1, len(nums) - 1, 1):
            # 可以改变nums[i]的值链接前后序列
            if nums[i + 1] - nums[i - 1] >= 2:
                ans = max(ans, right[i + 1] + left[i - 1] + 1)
            # 不满足，则只能找单边的递增序列
            else:
                ans = max(ans, max(right[i + 1], left[i - 1]) + 1)

        if nums[1] == 1:
            # 第二位为1，则第一位不可能加入到递增序列中
            ans = max(ans, max(left[len(nums) - 2] + 1, right[1]))
        else:
            # 第一位可加入到递增序列中
            ans = max(ans, max(left[len(nums) - 2] + 1, right[1] + 1))
        return ans











